Подготовка к работе
Для работы скриптов необходимо наличие утилит FFmpeg и FFprobe в вашей системе.
- Скачайте архив по ссылке ниже.
- Извлеките файлы
ffmpeg.exeиffprobe.exe(они находятся в папкеbinвнутри архива). - Переместите оба файла в системную папку
C:\Windows.
Это позволит запускать процесс транскодирования простым перетаскиванием видеофайлов на ваш .bat файл из любого места на компьютере.
Инструкция по автоматизации транскодирования видео в формат AV1
Ниже представлен программный код пакетного файла (.bat) для операционных систем Windows, предназначенный для автоматизированной обработки видеофайлов с использованием библиотеки FFmpeg. Данный скрипт реализует последовательное сжатие видео в высокоэффективный формат AV1 с сохранением оригинальных параметров аудио в кодеке Opus.
Данная команда транскодирования выполняется силами вашего процессора (CPU). Кодек
libsvtav1эффективно распределяет нагрузку на все доступные ядра и потоки. Чем современнее и многопоточнее ваш процессор, тем быстрее завершится обработка. Использование CPU вместо видеокарты в данном случае оправдано максимально возможным качеством при минимальном весе выходного файла.
Исходный код скрипта
Cохранить в кодировке ANSI.
@echo off
:loop
if "%~1"=="" goto end
echo Обработка файла: "%~nx1"
ffmpeg -i "%~1" -c:v libsvtav1 -preset 5 -crf 28 -pix_fmt yuv420p10le -svtav1-params tune=0 -c:a libopus -b:a 128k "%~dpn1.mp4.mp4"
shift
goto loop
:end
echo Всё! Обработка завершена.
pause
Техническое описание параметров FFmpeg в скрипте
-i "%~1"– определение исходного файла для обработки.-c:v libsvtav1– выбор видеокодека SVT-AV1. Это современный стандарт, который сжимает видео намного сильнее, чем знакомый всем H.264, сохраняя великолепное качество.-preset 5– пресет скорости кодирования. Значение 5 – это качественный режим: кодирование идёт медленнее, чем на стандартных настройках, но обеспечивает лучшую плотность данных.-crf 28– коэффициент качества (Constant Rate Factor). Значение 28 для AV1 даёт отличное визуальное качество при очень малом весе файла (чем меньше число, тем выше качество).-pix_fmt yuv420p10le– формат пикселей с глубиной 10 бит. Это критически важно для AV1: 10-битное кодирование полностью убирает «ступеньки» (бандинг) на градиентах и плавных переходах цвета.-svtav1-params tune=0– тонкая настройка кодека для оптимизации визуального восприятия и детализации картинки.-c:a libopus -b:a 128k– обработка аудио: использование современного кодека Opus с битрейтом 128 кбит/с, который по качеству превосходит MP3 и AAC на аналогичных битрейтах."%~dpn1.mp4.mp4"– автоматическая генерация имени выходного файла с добавлением суффикса .mp4.
Рекомендации по выбору параметров:
В представленном выше коде используются настройки для получения максимального качества. Если вы хотите адаптировать скрипт под своё железо или задачи, обратите внимание на следующие параметры:
- Для ускорения процесса (баланс скорости и качества):
Замените-preset 5на-preset 6. Это значительно увеличит скорость кодирования (в 2-3 раза) при минимальной потере в детализации. Этот режим рекомендуется для большинства современных процессоров. - Для уменьшения размера файла (экономия места):
Если итоговый файл получается слишком тяжёлым, измените значение-crf 28на-crf 35или-crf 40. Чем выше это число, тем сильнее сжатие и меньше размер файла. - Особенности именования:
Скрипт сохраняет готовое видео с двойным расширением.mp4.mp4. Это авторское решение для быстрого визуального поиска обработанных файлов. Если вам это не требуется, удалите лишний суффикс в конце команды.
Универсальный вариант скрипта (баланс скорости и сжатия)
Если ваш процессор загружен на 100%, а время кодирования исчисляется десятками часов, или же итоговый файл получается слишком тяжёлым, используйте данный вариант настроек. Он оптимизирован для быстрой работы на большинстве современных ПК и ноутбуков:
Cохранить в кодировке ANSI.
@echo off
:loop
if "%~1"=="" goto end
echo Обработка файла: "%~nx1"
ffmpeg -i "%~1" -c:v libsvtav1 -preset 6 -crf 35 -pix_fmt yuv420p10le -svtav1-params tune=0 -c:a libopus -b:a 128k "%~dpn1.mp4.mp4"
shift
goto loop
:end
echo Всё! Обработка завершена.
pause
Основные отличия этого варианта:
-preset 6– значительно ускоряет процесс кодирования (в 2-3 раза относительно 5-го пресета), сохраняя при этом все преимущества формата AV1.-crf 35– обеспечивает более агрессивное сжатие. Это гарантирует, что выходной файл будет весить заметно меньше оригинала, сохраняя при этом высокое визуальное качество без видимых артефактов.
Вариант для точного сжатия файла до 360 МБ (двухпроходный)
Если вам требуется сжать видео строго под конкретный лимит (например, 360 МБ) с сохранением максимального качества, используйте этот умный скрипт. Он автоматически запрашивает длительность видео, вычисляет идеальный битрейт за вычетом аудиодорожки и запускает двухпроходное кодирование.
Сохранить в кодировке ANSI.
-pass 1и-pass 2– двухпроходное кодирование. На первом этапе (проходе) FFmpeg анализирует весь видеоряд, оценивает динамику сцен и записывает служебный лог-файл (без вывода звука). На втором этапе кодек распределяет доступный битрейт максимально эффективно, чтобы точно уложиться в заданный лимит без потери качества в сложных сценах.NUL– специальный адрес в операционной системе Windows, куда перенаправляется видеопоток на первом проходе. Это исключает создание ненужного промежуточного файла на жёстком диске.-c:a libopus -b:a 128k– кодирование звука в современный кодек Opus с битрейтом 128 кбит/с. Это гарантирует великолепное качество звука при минимальном весе файла, полностью соответствуя технологичности формата AV1.
@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
echo Перетащите видеофайл прямо на этот батник!
pause
exit /b
)
set "INPUT=%~1"
set "OUTPUT=%~dpn1_av1_360mb.mp4"
:: Получаем длительность видео в секундах через ffprobe
for /f "tokens=1 delims=." %%a in ('ffprobe -v error -show_entries format=duration -of default^=noprint_wrappers^=1:nokey^=1 "%INPUT%"') do (
set "DUR=%%a"
)
if "%DUR%"=="" (
echo Не удалось определить длительность видео.
pause
exit /b
)
for /f "delims=0123456789" %%i in ("%DUR%") do (
echo Ошибка: Длительность видео не является числом.
pause
exit /b
)
set TARGET_MB=360
set /a TOTAL_KBITS=TARGET_MB * 8192
set /a TOTAL_BITRATE=TOTAL_KBITS / DUR
set /a VIDEO_BITRATE=TOTAL_BITRATE - 128
if %VIDEO_BITRATE% lss 50 (
echo Ошибка: Видео слишком длинное для качественного сжатия в 360 МБ.
pause
exit /b
)
echo Длительность: %DUR% сек.
echo Вычисленный битрейт видео: %VIDEO_BITRATE%k. Запуск кодирования...
:: Запуск двухпроходного сжатия
ffmpeg -y -i "%INPUT%" -c:v libsvtav1 -preset 8 -b:v %VIDEO_BITRATE%k -pass 1 -an -f mp4 NUL
if errorlevel 1 (
echo Ошибка при выполнении первого прохода.
pause
exit /b
)
ffmpeg -y -i "%INPUT%" -c:v libsvtav1 -preset 8 -b:v %VIDEO_BITRATE%k -pass 2 -c:a libopus -b:a 128k "%OUTPUT%"
if errorlevel 1 (
echo Ошибка при выполнении второго прохода.
pause
exit /b
)
del ffmpeg2pass-0.log 2>nul
del ffmpeg2pass-0.log.mbtree 2>nul
echo Всё готово! Результат сохранён в "%OUTPUT%"
pause
Вариант для точного сжатия до 360 МБ силами видеокарты (NVIDIA GPU)
Если ваша система оснащена современной видеокартой NVIDIA (серии 40 или 50), вы можете использовать аппаратный чип NVENC для молниеносного сжатия видео под конкретный размер. Этот метод идеально подходит для подготовки выпусков шоу или блогов, которые нужно встроить в HTML-страницы или отправить через сервисы с лимитом по весу.
В отличие от процессора, видеокарта выполняет глубокий анализ сцен прямо во время кодирования, что позволяет избежать длинных двухпроходных очередей.
Cохранить в кодировке ANSI.
@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
echo Перетащите видеофайл на батник!
pause
exit /b
)
set "INPUT=%~1"
set "OUTPUT=%~dpn1_av1_360mb_gpu.mp4"
:: Получаем длительность видео
for /f "tokens=1 delims=." %%a in ('ffprobe -v error -show_entries format=duration -of default^=noprint_wrappers^=1:nokey^=1 "%INPUT%"') do (
set "DUR=%%a"
)
if "%DUR%"=="" (
echo Не удалось определить длительность видео.
pause
exit /b
)
set TARGET_MB=360
set /a TOTAL_KBITS=TARGET_MB * 8192
set /a TOTAL_BITRATE=TOTAL_KBITS / DUR
set /a VIDEO_BITRATE=TOTAL_BITRATE - 128
if %VIDEO_BITRATE% lss 50 (
echo Ошибка: Видео слишком длинное для 360 МБ.
pause
exit /b
)
echo Длительность: %DUR% сек.
echo Вычисленный битрейт для GPU: %VIDEO_BITRATE%k. Запуск...
:: Кодирование через NVIDIA NVENC с двухпроходным анализом внутри прогона
ffmpeg -y -i "%INPUT%" -c:v av1_nvenc -preset p6 -multipass fullres -rc vbr -b:v %VIDEO_BITRATE%k -maxrate %TOTAL_BITRATE%k -bufsize %TOTAL_BITRATE%k*2 -pix_fmt p010le -c:a libopus -b:a 128k "%OUTPUT%"
if errorlevel 1 (
echo Ошибка при кодировании!
pause
exit /b
)
echo Всё готово! Результат сохранён в "%OUTPUT%"
pause
-multipass fullres– задействует функцию видеокарты для повторного анализа каждого кадра на полном разрешении, что обеспечивает максимальную чёткость при низком битрейте.-pix_fmt p010le– принудительно включает 10-битную глубину цвета, адаптированную под аппаратные модули NVIDIA. Это избавляет от артефактов на плавных переходах и тёмных кадрах.- Интеллектуальный битрейт – скрипт сам рассчитывает, какой объём данных оставить для видео после вычета качественной аудиодорожки Opus.
Пакетное транскодирование силами видеокарты (NVIDIA NVENC)
Если вам нужно обработать видео максимально быстро, используйте аппаратное ускорение вашей видеокарты NVIDIA. Современные карты (начиная с 40-й и 50-й серии, как ваша RTX 5060 Ti) поддерживают аппаратное кодирование AV1, что позволяет сжимать видео почти мгновенно.
Сверхбыстрое кодирование AV1 (NVIDIA)
Этот скрипт использует кодек av1_nvenc. Он работает в десятки раз быстрее, чем процессор, при этом выдаёт отличную картинку.
Сохранить в кодировке ANSI.
@echo off
:loop
if "%~1"=="" goto end
echo Обработка через GPU: "%~nx1"
ffmpeg -i "%~1" -c:v av1_nvenc -preset p6 -cq 32 -pix_fmt yuv420p10le -c:a libopus -b:a 128k "%~dpn1_gpu.mp4"
shift
goto loop
:end
echo Всё! Видеокарта справилась.
pause
Технические параметры для GPU:
-c:v av1_nvenc– задействует аппаратный чип видеокарты NVIDIA для кодирования в AV1.-preset p6– пресет качества (p1 – самый быстрый, p7 – самый качественный). Значение p6 – золотая середина для RTX.-cq 32– (Constant Quality) аналог CRF для видеокарт. Значение 32 даёт небольшой вес и чистое изображение.-pix_fmt yuv420p10le– также используем 10 бит для исключения мелких цветовых артефактов.-c:a libopus -b:a 128k– аудиодорожка сжимается в современный формат Opus, который идеально дополняет технологичный AV1.